package cn.controlsys.common.mq.object;//package cn.controlsys.lease.common.mq.object;
//
//import cn.controlsys.lease.common.mq.interfaces.MessageSender;
//import lombok.AllArgsConstructor;
//import lombok.Data;
//import lombok.NoArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//
//import java.util.Map;
//import java.util.concurrent.ConcurrentHashMap;
//
///**
// * Author: shanzheng <br/>
// * Description: 重试缓存<br/>
// * Date： 14:49 2018/1/26.<br/>
// * Modified By: <br/>
// */
//@Slf4j
//public class RetryCache {
//    private MessageSender sender;
//    private boolean stop = false;
//    private Map<String, MessageWithTime> map = new ConcurrentHashMap<>();
////    private AtomicLong id = new AtomicLong();
//
//    @NoArgsConstructor
//    @AllArgsConstructor
//    @Data
//    private static class MessageWithTime {
//        long time;
//        Object message;
//    }
//
//    public void setSender(MessageSender sender) {
//        this.sender = sender;
//        startRetry();
//    }
//
////    public String generateId() {
////        return "" + id.incrementAndGet();
////    }
//
//    public void add(String id, Object message) {
//        map.put(id, new MessageWithTime(System.currentTimeMillis(), message));
//    }
//
//    public void del(String id) {
//        map.remove(id);
//    }
//
//    private void startRetry() {
//        new Thread(() ->{
//            while (!stop) {
//                try {
//                    Thread.sleep(MQConstants.RETRY_TIME_INTERVAL);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//
//                long now = System.currentTimeMillis();
//
//                for (Map.Entry<String, MessageWithTime> entry : map.entrySet()) {
//                    MessageWithTime messageWithTime = entry.getValue();
//
//                    if (null != messageWithTime) {
//                        if (messageWithTime.getTime() + 3 * MQConstants.VALID_TIME < now) {
//                            log.info("send message failed after 3 min " + messageWithTime);
//                            del(entry.getKey());
//                        } else if (messageWithTime.getTime() + MQConstants.VALID_TIME < now) {
//                            DetailResponse detailRes = sender.send(messageWithTime.getMessage());
//
//                            if (detailRes.isSuccess()) {
//                                del(entry.getKey());
//                            }
//                        }
//                    }
//                }
//            }
//        }).start();
//    }
//}
